package cn.openread.demo.rocketmq;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

public class SyncProducer {


    public static void main(String[] args) throws Exception {


        //Instantiate with a producer group name.
        DefaultMQProducer producer = new
                DefaultMQProducer("simon-group-producer");
        // Specify name server addresses.
        producer.setNamesrvAddr("192.168.1.11:9876");
//        producer.setNamesrvAddr("prod-02.openread.cn:10062");
        //Launch the instance.
        producer.start();
        for (int i = 0; i < 10000000; i++) {
            //Create a message instance, specifying topic, tag and message body.
            Message msg = new Message("Simon-B-TEST" /* Topic */,
                    "TagA" /* Tag */,
                    ("SIMON RocketMQ " +
                            i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
            );
            //TODO 猜测是sharding key
            //性能要求高，以 sharding key 作为分区字段，在同一个区块中严格的按照 FIFO 原则进行消息发布和消费的场景。
            //
            //示例
            //
            //例一：用户注册需要发送发验证码，以用户 ID 作为 sharding key， 那么同一个用户发送的消息都会按照先后顺序来发布和消费。
            //
            //例二：电商的订单创建，以订单 ID 作为 sharding key，那么同一个订单相关的创建订单消息、订单支付消息、订单退款消息、订单物流消息都会按照先后顺序来发布和消费。
            msg.setKeys("KEYS");
            if (i % 3 == 0) {
                //发延迟消息
                System.out.println("发延迟消息");
                msg.setDelayTimeLevel(3);
                msg.setBody("发延迟消息".getBytes());
            }
            //Call send message to deliver message to one of brokers.
            SendResult sendResult = producer.send(msg);
            System.out.printf("%s%n", sendResult);
            Thread.sleep(1000);
        }
        //Shut down once the producer instance is not longer in use.
        producer.shutdown();
    }
}
